﻿namespace GeneradorDeNumerosAleatorios.Generadores_Uniformes
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using GeneradorDeNumerosAleatorios.Utilities;

    public class MidSquare : IGeneradorNumerosAleatorios
    {
        #region Implementación de la interfaz IGeneradorNumerosAleatorios

        public IList<int> GenerarNumerosAleatorios(int cantidadDeDigitosAGenerar, int primerSemilla, int cantidadDeNumerosAGenerar)
        {
            var respuesta = new List<int>();
            var semilla = primerSemilla;

            for (int i = 0; i <= cantidadDeNumerosAGenerar; i++)
            {
                respuesta.Add(semilla);
                semilla = AlgoritmoParaGenerarNumero(cantidadDeDigitosAGenerar, semilla);
            }

            return respuesta;
        }

        public IList<int> GenerarNumerosAleatorios(int cantidadDeDigitosAGenerar, int primerSemilla, int segundaSemilla, int cantidadDeNumerosAGenerar)
        {
            throw new NotImplementedException();
        }

        #endregion

        private static int AlgoritmoParaGenerarNumero(int cantidadDeDigitosAGenerar, int semilla)
        {
            double cuadradoDeLaSemilla = Math.Pow(semilla, 2);

            string squareSeedToString = null;

            try
            {
                squareSeedToString = Convert.ToString(cuadradoDeLaSemilla);
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }

            int middleNumber = squareSeedToString.Length / 2;

            string centralNumbers = StringManipulator.GetCentralNumbers(squareSeedToString, middleNumber, digitsQuantity);

            int response = Convert.ToInt16(centralNumbers);

            return response;
        }
    }
}
